/** 
 * Ver : CCMiniCloud Framework 2.0.1 ALL RIGHTS RESERVED BY cclinux0730 (wechat)
 * Date: 2020-10-29 07:48:00 
 */

// 导入路径辅助模块，避免重复引用
const pathImport = require('../helpers/path_import.js');
const { cacheHelper, pageHelper, cloudHelper, validate } = pathImport;;
const setting = require('../../../../../config/projects.js');
const PassportBiz = require('../../../../../config/passport_biz_config.js');
const ProjectBiz = require('../../../comm/biz/project_biz.js');
const projectSetting = require('../../../../../config/projects_config.js');
const { logEvent } = require('../../../helpers/log_helper.js');
const { getNetworkStatus, listenNetworkStatus } = require('../../../helpers/network_helper.js');

// 内联实现UserBiz必要功能
const UserBizLocal = {
	// 获取当前用户ID
	getUserId: function() {
		const user = cacheHelper.get('PASSPORT_TOKEN');
		if (!user) return '';
		return user.id || '';
	},
	
	// 获取当前用户姓名
	getUserName: function() {
		const user = cacheHelper.get('PASSPORT_TOKEN');
		if (!user) return '';
		return user.name || '';
	},
	
	// 检查是否为管理员
	isAdmin: function(user) {
		if (!user) return false;
		return user.role === 'admin' || user.type === 1;
	}
};

// 直接内联实现AdminBiz所需的功能
const AdminBizLocal = {
	// 管理员登录
	adminLogin: async function(that, name, pwd) {
		if (name.length < 5 || name.length > 30) {
			wx.showToast({
				title: '账号输入错误(5-30位)',
				icon: 'none'
			});
			return;
		}

		if (pwd.length < 5 || pwd.length > 30) {
			wx.showToast({
				title: '密码输入错误(5-30位)',
				icon: 'none'
			});
			return;
		}

		let params = {
			name,
			pwd
		};
		let opt = {
			title: '登录中'
		};

		try {
			await cloudHelper.callCloudSumbit('admin/login', params, opt).then(res => {
				if (res && res.data && res.data.name)
					cacheHelper.set('ADMIN_TOKEN', res.data, 86400 * 3); // 3天有效期

				wx.reLaunch({
					url: pageHelper.fmtURLByPID('/pages/admin/index/home/admin_home'),
				});
			});
		} catch (e) {
			console.log(e);
		}
	}
};

// 引入MobX相关
const { createStoreBindings } = require('../../../../../miniprogram_npm/mobx-miniprogram-bindings/index');
const { userStore } = require('../../../../../store/modules/user/index.js');
const { messageStore } = require('../../../../../store/modules/message/index.js');

Page({
	data: {
		// 不再需要单独维护unreadCount
	},

	/**
	 * 生命周期函数--监听页面加载
	 */
	onLoad: async function (options) {
		// 网络检测
		const net = await getNetworkStatus();
		if (!net.isConnected) {
			wx.showToast({ title: '当前无网络，请检查连接', icon: 'none' });
		} else if (net.networkType === '2g') {
			wx.showToast({ title: '当前为2G弱网，体验可能受影响', icon: 'none' });
		}
		listenNetworkStatus((res) => {
			if (!res.isConnected) wx.showToast({ title: '网络已断开', icon: 'none' });
			else if (res.networkType === '2g') wx.showToast({ title: '当前为2G弱网', icon: 'none' });
		});
		logEvent('page_load', { page: 'my_index' });
		// 创建MobX绑定 - 用户状态
		this.storeBindings = createStoreBindings(this, {
			store: userStore,
			fields: ['isLogin', 'user', 'isAdmin'],
			actions: ['getUserInfo']
		});
		
		// 创建MobX绑定 - 消息状态
		this.messageStoreBindings = createStoreBindings(this, {
			store: messageStore,
			fields: ['unreadCount', 'messageList', 'list'],
			actions: ['loadList']
		});
		
		ProjectBiz.initPage(this);
		
		// 初始化用户状态
		await userStore.init();
	},

	/**
	 * 生命周期函数--监听页面初次渲染完成
	 */
	onReady: function () { },

	/**
	 * 生命周期函数--监听页面显示
	 */
	onShow: async function () {
		// 初始化用户状态（从缓存读取）
		await userStore.init();
		
		if (this.data.isLogin) {
			// 获取用户详细信息
			await this.getUserInfo();
			
			// 使用MobX加载消息列表（含未读数量）
			// 兼容新旧API方法名
			if (this.loadList) {
				await this.loadList(true);
			} else if (this.loadMessageList) {
				await this.loadMessageList();
			}
		} else {
			// 用户未登录但可能在其他地方已登录，尝试重新获取状态
			const token = wx.getStorageSync('PASSPORT_TOKEN');
			if (token) {
				console.log('检测到本地存储有登录状态，重新初始化');
				await userStore.init();
			}
		}
	},

	/**
	 * 生命周期函数--监听页面隐藏
	 */
	onHide: function () {

	},

	/**
	 * 生命周期函数--监听页面卸载
	 */
	onUnload: function () {
		// 清理MobX绑定
		this.storeBindings.destroyStoreBindings();
		this.messageStoreBindings.destroyStoreBindings();
	},

	/**
	 * 页面相关事件处理函数--监听用户下拉动作
	 */
	onPullDownRefresh: async function () {
		// 初始化用户状态
		await userStore.init();
		
		if (this.data.isLogin) {
			// 获取用户详细信息
			await this.getUserInfo();
		
			// 使用MobX加载消息列表（含未读数量）
			// 兼容新旧API方法名
			if (this.loadList) {
				await this.loadList(true);
			} else if (this.loadMessageList) {
				await this.loadMessageList();
			}
		}
		
		wx.stopPullDownRefresh();
	},

	/**
	 * 页面上拉触底事件的处理函数
	 */
	onReachBottom: function () {

	},


	/**
	 * 用户点击右上角分享
	 */
	onShareAppMessage: function () { },

	/**
	 * 检查登录状态并跳转
	 * @param {*} url 目标URL
	 */
	checkLoginAndNavigate: function(url) {
		// 检查登录状态
		if (!this.data.isLogin) {
			// 尝试重新初始化
			userStore.init().then(result => {
				if (!result || !this.data.isLogin) {
					console.warn('用户未登录，重定向到登录页面');
					wx.showToast({
						title: '请先登录',
						icon: 'none'
					});
					return false;
				}
			});
		}
		
		return true;
	},

	url: function (e) {
		const url = e.currentTarget.dataset.url;
		
		// 直接使用pageHelper进行页面跳转
		pageHelper.url(e, this);
	},

	bindSetTap: function (e, skin) {
		// 在企业微信环境中，直接跳转到后台管理页面
		wx.reLaunch({
			url: '../../admin/index/home/admin_home',
		});
	},

	bindNoticeTap: function (e) {
		wx.requestSubscribeMessage({
			tmplIds: [projectSetting.NOTICE_TEMP_NEW_FLOW, projectSetting.NOTICE_TEMP_RESULT_FLOW],
			async complete() {
				pageHelper.showSuccToast('订阅成功');
			}
		});
	},

	// 退出登录
	bindLogoutTap: function (e) {
		let that = this;
		wx.showModal({
			title: '',
			content: '确认退出登录？',
			cancelText: '取消',
			confirmText: '确认',
			success: res => {
				if (res.confirm) {
					// 使用MobX的logout方法
					that.logout();
					
					wx.showToast({
						title: '已退出登录',
						icon: 'success'
					});
					
					// 延迟跳转到首页
					setTimeout(() => {
						wx.switchTab({
							url: '/projects/oa/pages/default/index/default_index',
						});
					}, 1500);
				}
			}
		});
	},

	switchTab: function(e) {
		let tab = e.currentTarget.dataset.tab;
		logEvent('switch_tab', { tab });
		this.setData({
			currentTab: tab
		});
	}
});